# Планы обучения для "Программной инженерии" по треку Node.js

## Введение в технологию
Это отдельная лекция на 2-4 часа.
Материалы к лекции: https://github.com/HowProgrammingWorks/Letters/blob/master/Docs/NODEJS/node-kpi-2016.pdf

## Курс переподготовки JavaScript разработчиков
Предполагает базовые знания JavaScript для браузеров ветхого веба.
Рассчитан на 8 часов лекций и 16 часов лабораторных работ.
В результате человек получит возможность быстро делать бекенд и

1. Среда исполнения Node.js и ее особенности  
  1.1. JavaScript везде: один язык, один формат данных, одна парадигма, одна архитектура  
  1.2. Как исполняется JavaScript код на сервере, асинхронность, компиляция в машинный код, прогревание и оптимизация, песочницы, изоляция и безопасность, выделение памяти и сборка мусора  
  1.3. Основные идеи Node.js, сферы применения, какие задачи хорошо решает и как быть с остальными задачами  
2. Рекомендации по структуре приложений  
  2.1. Выбор парадигмы, стиля, инструментов отладки, среды разработки, менеджеров пакетов и библиотек для проекта  
  2.2. Структура каталогов, конфигурация приложения, управление зависимостями, командная строка node.js и npm  
  2.3. Порождение процессов и межпроцессовое взаимодействие  
  2.4. Структура кода, планирование зависимостей между модулями, компоненты приложения и внедрении внешних и внутренних зависимостей  
  2.5. Инверсия управления, слои абстракции и формирование экранированных контекстов и виртуальных областей видимости  
  2.6. Достижение хорошего стиля кода и высокой гибкости приложения при постоянном изменении ТЗ  
3. Асинхронное программирование  
  3.1. Реактор и очередь, модель системы массового обслуживания СМО  
  3.2. Асинхронный ввод/вывод  
  3.3. Удобное структурирование асинхронного кода, библиотека async, промисы, и красивое оформление на обычных колбеках  
4. Высокая производительность  
  4.1. Факторы, влияющие на скорость Node.js приложений и оптимизация производительности  
  4.2. Масштабирование приложений в рамках одного сервера, кластеризация и балансировка  
  4.3. Построение многосерверного кластера и оптимизация балансировки, избежание бутылочного горлышка при высоких нагрузках  
  4.4. Балансировка на стороне клиента  
5. Отладка  
  5.1. Средства отладки и профилирования кода  
  5.2. Обработка ошибок  
  5.3. Управление памятью  
  5.4. Юниттесты и интеграционное тестирование на Node.js  
6. Доступ к данным  
  6.1. Работа с реляционными СУБД, построение слоя доступа к данным, ORM и CRUD на примере PostgreSQL  
  6.2. Работа с бессхемными и документными СУБД на примере MongoDB  
  6.3. Моделирование структур данных в памяти  
  6.4. Оптимизация кеширования распределение данных в адресном пространстве разных процессов кластера  
7. Быстрая разработка API  
  7.1. Создание метода, доступного, через AJAX с ответом в JSON  
  7.2. Создание RPC протокола и проброс API вызовов через вебсокеты  
  7.3. Примеры разработки API  

## Курс обучения для студентов КПИ
Направление "Программная инженерия" по предметам "Архитектура и проектирование программных систем" и "Практика программной инженерии" треку Node.js.
Будет опубликован позже.
